#ifndef NANE_SOUNDSYSTEM_H
#   define  NANE_SOUNDSYSTEM_H

#   include "nane/SoundSystem/ISoundSystem.h"
#   include "nane/core/SubSystem.h"
#   include "nane/core/crt/FileSystem.h"

#   include "nane/SoundSystem/SoundBuffer.h"
#   include "nane/SoundSystem/SoundSource.h"
#   include "nane/SoundSystem/SoundSource3D.h"

namespace nane
{
    
    class SoundSystem
        : public SubSystem<ISoundSystem>
    {
    public:
        SoundSystem();
        ~SoundSystem();
      
    public:
        bool Initialize();
        void Shutdown();
        
        void Update( uint32 _ms );
        
        SoundBuffer CreateSoundBuffer( ESoundFormat _format, uint32 _frequency, uint16 _channels, uint16 _bitsPerSample, uint32 _size );

        SoundSource CreateSoundSource( SoundBuffer& _soundBuffer );

        SoundSource3D CreateSoundSource3D( SoundBuffer& _soundBuffer );

    public:
        class Implementation;
        Implementation* m;
    };
}   // namespace nane

#endif	// NANE_SOUNDSYSTEM_H
